home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
020a
/
tvg102_s.zip
/
TVGRAPH.IN0
< prev
next >
Wrap
Text File
|
1991-01-20
|
5KB
|
167 lines
(*****************************************************************************)
(* *)
(* TVGRAPH Version 1.0 (C) C.L.Burke. Portions (C) Borland *)
(* - Thanks to Richard Wilton for much EGA/VGA and general information *)
(* Display mode detection routines *)
(* *)
(*****************************************************************************)
const
hcrt=$3b4;
type
vsystem=(MONO,HERC,CGA,EGA,VGA,MCGA,OTHER);
TextGraphics = (_TEXT,_GRAPHICS);
(* flag if graphics / text mode *)
GraphInfo = record
XRes,YRes,CRes:word;
ScreenWriteType:TextGraphics;
ScreenSeg:word;
SuitableAdapters:set of Vsystem;
end;
(* Record keeping information on each display mode *)
const
GraphScreenInfo:array[0..$13] of GraphInfo =
(
(Xres: 40;Yres: 25;CRes: 16;ScreenWriteType: _TEXT;ScreenSeg:$B800;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*0*)
(Xres: 40;Yres: 25;CRes: 16;ScreenWriteType: _TEXT;ScreenSeg:$B800;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*1*)
(Xres: 80;Yres: 25;CRes: 16;ScreenWriteType: _TEXT;ScreenSeg:$B800;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*2*)
(Xres: 80;Yres: 25;CRes: 16;ScreenWriteType: _TEXT;ScreenSeg:$B800;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*3*)
(Xres:320;Yres:200;CRes: 4;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*4*)
(Xres:320;Yres:200;CRes: 4;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*5*)
(Xres:640;Yres:200;CRes: 2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*6*)
(Xres: 80;Yres: 25;CRes: 2;ScreenWriteType: _TEXT;ScreenSeg:$B000;
SuitableAdapters:[MONO,HERC,EGA,VGA]),(*7*)
(Xres: 00;Yres: 00;CRes: 0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[]), (*8*)
(Xres: 00;Yres: 00;CRes: 0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[]), (*9*)
(Xres: 00;Yres: 00;CRes: 0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[]), (*A*)
(Xres: 00;Yres: 00;CRes: 0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[]), (*B*)
(Xres: 00;Yres: 00;CRes: 0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[]), (*C*)
(Xres:320;Yres:200;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[EGA,VGA]), (*D*)
(Xres:640;Yres:200;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[EGA,VGA]), (*E*)
(Xres:640;Yres:350;CRes: 2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[EGA,VGA]), (*F*)
(Xres:640;Yres:350;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$A000;
SuitableAdapters:[EGA,VGA]), (*10*)
(Xres:640;Yres:480;CRes: 2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[VGA,MCGA]), (*11*)
(Xres:640;Yres:480;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$A000;
SuitableAdapters:[VGA]), (*12*)
(Xres:320;Yres:200;CRes:256;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
SuitableAdapters:[VGA,MCGA])); (*13*)
function find6845(addr:word):boolean; (* TRUE IF 6845 *)
var
tmp:byte;
dl:word;
begin
port[addr]:=$F;
tmp:=port[addr+1];
port[addr+1]:=$66;
for dl:=1 to 500 do;
find6845:=port[addr+1]=$66;
port[addr+1]:=tmp;
end;
function findmono:vsystem;
var
cnt:word;
tmp1,tmp2:byte;
begin
if find6845(hcrt) then
begin
tmp1:=port[hcrt+6] and $80;
repeat
tmp2:=port[hcrt+6] and $80;
until tmp1<>tmp2;
if tmp1<>tmp2 then findmono:=HERC
else findmono:=MONO;
end
else (*Not Mono *)
findmono:=OTHER;
end;
function findCGA:vsystem;
begin
if find6845($3D4) then findCGA:=CGA
else findCGA:=OTHER;
end;
function findEGA:vsystem;
var
rbx:word;
rcl:byte;
begin
asm
mov bx,0010h
mov ax,1200h
int 010h
mov rbx,bx
mov rcl,cl
end;
if lo(rbx)<>$10 then
begin
case rcl div 2 of
0,3:findEGA:=CGA;
1,4:findEGA:=EGA;
2,5:findEGA:=Herc;
end
end
else (*No ega *)
findEGA:=OTHER;
end;
function findPS2:vsystem;
var
rax,rbx:word;
begin
asm
mov ax,1A00h
int 10h
mov rax,ax
mov rbx,bx
end;
if lo(rax)=$1A then
begin
case lo(rbx) of
0,3,6,9:findPS2:=other;
1:findPS2:=MONO;
2:findPS2:=CGA;
4,10:findPS2:=EGA;
5:findPS2:=HERC;
7,8:findPS2:=VGA;
11,12:findPS2:=MCGA;
end
end
else
findPS2:=OTHER;
end;
function whatvsystem:vsystem;
var
ts:vsystem;
begin
ts:=findPS2;
if ts=other then
ts:=findEGA;
if ts=other then
ts:=findmono;
if ts=other then
ts:=findCGA;
whatvsystem:=ts;
end;